home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Programmer Disk
/
The Programmer Disk (Microforum).iso
/
xpro
/
basic1
/
pro21
/
menusub.bas
< prev
next >
Wrap
BASIC Source File
|
1986-12-09
|
3KB
|
118 lines
REM -=<MENU>=-
REM
REM SUBROUTINE TO CREATE SCROLLING-BAR MENU'S IN QUICKBASIC 2.0
REM
REM BY SCOTT L. BAIN
REM 12/10/86
REM
REM
REM DESCRIPTION:
REM ----------- PROGRAM CREATES A VERTICAL MENU, THEN USING THE ARROW
REM AND ENTER KEYS, USER MAY SELECT ITEM FROM THOSE LISTED
REM IN STRING ARRAY. PGUP, PGDN, HOME, END, AND WRAP-AROUND
REM ARE ALL SUPPORTED. USER MAY ALTERNATIVELY PRESS THE
REM FIRST LETTER OF A CHOICE TO SELECT IT.
REM
REM SAMPLE CALL:
REM ----------- CALL MENU(AR$,UR,MR,FC,BC,CH)
REM
REM PARAMETERS:
REM ---------- AR$- ONE DIMENSIONAL ARRAY, CONTAINING CHOICE STRINGS
REM UR - UPPER ROW (1-24)
REM MR - MARGIN (1-79)
REM FC - FOREGROUND COLOR
REM BC - BACKGROUND COLOR
REM CH - CHOICE (INITIAL CHOICE/RETURNED CHOICE VALUE)
REM
REM IF THE ZEROETH ELEMENT OF AR$ IS NOT EMPTY, THEN THE CONTENTS WILL BE
REM USED AS A CENTERED TITLE, ASSUMING THAT AT LEAST ONE BLANK SCREEN LINE IS
REM AVAILABLE ABOVE THE MENU. THE TITLE WILL BE WRITTEN IN THE COLOR AS SET
REM BEFORE ENTERING THE MENU ROUTINE (NOT FC,BC).
REM ---
REM NOTE: DUE TO A QB 2.0 BUG, DO NOT USE OPTION BASE 1 IN THE CALLING PROG.
REM IF NO TITLES ARE DESIRED, SIMPLY LEAVE ELEMENT 0 EMPTY ("").
SUB MENU (AR$(1),UR,MR,FC,BC,CH) STATIC
REM - PHASE I: TEST PARAMETERS FOR VALIDITY
IF UBOUND(AR$)<1 THEN GOTO BAD
IF MR>79 THEN GOTO BAD
IF UR+UBOUND(AR$)>24 THEN GOTO BAD
IF FC<0 OR FC>31 OR FC<>INT(FC) THEN GOTO BAD
IF BC<0 OR BC>15 OR BC<>INT(BC) THEN GOTO BAD
REM - PHASE II: BUILD
LN=0
FOR I=0 TO UBOUND(AR$)
IF LEN(AR$(I))>LN THEN LN=LEN(AR$(I))
NEXT I
IF LBOUND(AR$)=0 THEN
IF AR$(0)<>"" AND UR<>1 THEN
LOCATE UR-1,MR+((LN-LEN(AR$(0)))/2)
PRINT AR$(0);
END IF
END IF
COLOR FC,BC
FOR I=1 TO UBOUND(AR$)
LOCATE UR+I-1,MR
A$=AR$(I)
AR$(I)=A$+STRING$(LN-LEN(A$),32)
PRINT AR$(I);
NEXT I
REM - PHASE III: GET THE CHOICE
CHOOSING=1
OLD=CH
WHILE CHOOSING=1
COLOR FC,BC
LOCATE UR+OLD-1,MR
PRINT AR$(OLD);
COLOR 12,0
LOCATE UR+CH-1,MR
PRINT AR$(CH);
OLD=CH
A$=""
WHILE A$="":A$=INKEY$:WEND
IF LEN(A$)=2 THEN A=ASC(RIGHT$(A$,1)) ELSE A=ASC(A$)
IF A=13 OR A=27 THEN CHOOSING=0
IF LEN(A$)=1 THEN
FOR J=UBOUND(AR$) TO 1 STEP -1
IF A=ASC(AR$(J)) THEN
CH=J
COLOR FC,BC
LOCATE UR+OLD-1,MR
PRINT AR$(OLD);
COLOR 12,0
LOCATE UR+CH-1,MR
PRINT AR$(CH);
CHOOSING=0
END IF
NEXT J
ELSE
IF A=72 OR A=56 THEN
CH=CH-1
ELSEIF A=80 OR A=50 THEN
CH=CH+1
ELSEIF A=71 OR A=73 OR A=55 OR A=57 THEN
CH=1
ELSEIF A=79 OR A=81 OR A=49 OR A=51 THEN
CH=UBOUND(AR$)
END IF
END IF
IF CH>UBOUND(AR$) THEN CH=1
IF CH<1 THEN CH=UBOUND(AR$)
WEND
GOTO DONE:
BAD:
PRINT "BAD PARAMETER(S) IN MENU CALL"
A$=INPUT$(1)
DONE:
COLOR FC,BC
END SUB